/**
 * 训练中心管理类
 */
class TrainingCenter {
    constructor() {
        this.init();
    }

    /**
     * 初始化训练中心
     */
    init() {
        this.setupEventListeners();
        this.initializeWebSocket();
    }

    /**
     * 设置事件监听器
     */
    setupEventListeners() {
        // 新建训练任务按钮
        const newTaskButton = document.querySelector('button:has(svg)');
        if (newTaskButton) {
            newTaskButton.addEventListener('click', () => this.createNewTrainingTask());
        }

        // 开始训练按钮
        const startTrainingButton = document.querySelector('button.w-full');
        if (startTrainingButton) {
            startTrainingButton.addEventListener('click', () => this.startTraining());
        }

        // 导出数据按钮
        const exportButton = document.querySelector('button:contains("导出数据")');
        if (exportButton) {
            exportButton.addEventListener('click', () => this.exportTrainingData());
        }

        // 生成报告按钮
        const reportButton = document.querySelector('button.text-blue-600');
        if (reportButton) {
            reportButton.addEventListener('click', () => this.generateReport());
        }

        // 监听图表类型选择
        const chartTypeSelect = document.querySelector('select');
        if (chartTypeSelect) {
            chartTypeSelect.addEventListener('change', (e) => this.updateChart(e.target.value));
        }
    }

    /**
     * 初始化WebSocket连接
     */
    initializeWebSocket() {
        // 使用WebSocket管理器建立连接
        window.wsManager.connect('training_status', (data) => {
            this.handleTrainingUpdate(data);
        });
    }

    /**
     * 创建新的训练任务
     */
    createNewTrainingTask() {
        const taskConfig = {
            modelType: 'EnhancedTrainer',
            batchSize: parseInt(document.querySelector('input[type="number"]').value),
            learningRate: parseFloat(document.querySelectorAll('input[type="number"]')[1].value),
            epochs: parseInt(document.querySelectorAll('input[type="number"]')[2].value),
            optimizer: document.querySelector('select').value
        };

        // 发送创建任务请求
        window.wsManager.send('create_training_task', taskConfig);
    }

    /**
     * 开始训练
     */
    startTraining() {
        const config = this.getTrainingConfig();
        // 发送开始训练请求
        window.wsManager.send('start_training', config);

        // 更新UI状态
        this.updateUIForTraining(true);
    }

    /**
     * 获取训练配置
     */
    getTrainingConfig() {
        return {
            batchSize: parseInt(document.querySelector('input[type="number"]').value),
            learningRate: parseFloat(document.querySelectorAll('input[type="number"]')[1].value),
            epochs: parseInt(document.querySelectorAll('input[type="number"]')[2].value),
            optimizer: document.querySelector('select').value
        };
    }

    /**
     * 更新训练过程中的UI
     */
    updateUIForTraining(isTraining) {
        const startButton = document.querySelector('button.w-full');
        if (startButton) {
            startButton.disabled = isTraining;
            startButton.textContent = isTraining ? '训练中...' : '开始训练';
            startButton.classList.toggle('opacity-50', isTraining);
        }
    }

    /**
     * 处理训练更新
     */
    handleTrainingUpdate(data) {
        // 更新进度条
        this.updateProgressBar(data.progress);

        // 更新图表
        this.updateChart(data.metrics);

        // 更新状态信息
        this.updateStatusInfo(data.status);
    }

    /**
     * 更新进度条
     */
    updateProgressBar(progress) {
        const progressElement = document.querySelector('.bg-blue-600');
        if (progressElement) {
            progressElement.style.width = `${progress}%`;
        }
    }

    /**
     * 更新图表
     */
    updateChart(metrics) {
        const chart = echarts.getInstanceByDom(document.getElementById('training-chart'));
        if (chart) {
            const option = chart.getOption();
            // 更新数据系列
            option.series[0].data = metrics.trainLoss;
            option.series[1].data = metrics.valLoss;
            chart.setOption(option);
        }
    }

    /**
     * 更新状态信息
     */
    updateStatusInfo(status) {
        const statusElement = document.querySelector('.text-gray-500');
        if (statusElement) {
            statusElement.textContent = `系统状态: ${status}`;
        }
    }

    /**
     * 导出训练数据
     */
    exportTrainingData() {
        // 获取当前选中的指标
        const selectedMetric = document.querySelector('select').value;
        
        // 发送导出请求
        window.wsManager.send('export_training_data', {
            metric: selectedMetric,
            format: 'csv'
        });
    }

    /**
     * 生成训练报告
     */
    generateReport() {
        // 发送生成报告请求
        window.wsManager.send('generate_training_report', {
            format: 'pdf',
            includeCharts: true,
            includeMetrics: true
        });
    }
}

// 创建训练中心实例
window.trainingCenter = new TrainingCenter();